%
% author:	Ni Qingliang
% date:		2011-02-11
%
\startcomponent cpnintro
\product opencl-spec-zh

\if 0
\part{測試part標題}
%\showbodyfont
%\showbodyfontenvironment

{\rm\tf 測試章hello標題 \it 測試章hello標題 \bf 測試章hello標題 \bi 測試章hello標題}

{\ss\tf 測試章hello標題 \it 測試章hello標題 \bf 測試章hello標題 \bi 測試章hello標題}

{\tt\tf 測試章hello標題 \it 測試章hello標題 \bf 測試章hello標題 \bi 測試章hello標題}
\fi

\chapter{簡介}
在現代處理器架構中，將並行視為提高性能的重要途徑之一。
有鑒於在固定功率內提升時鐘頻率面臨很大技術挑戰，目前 CPU 都通過增加核心數目來提高性能。
而 GPU 原來只是具有特定功能的渲染設備，現在也變成了可編程的並行處理器。
今天的計算機系統通常包含 CPU、GPU 和其他類型的處理器，且可以高度並行，這就引出了一個重要問題：
怎樣讓軟件開發人員將這些異構處理平台充分利用起來。

多核 CPU 和 GPU 的傳統編程方法差異較大，因此為異構並行處理平台開發應用程式就成為一個比較棘手的問題。
雖然基於 CPU 的並行編程模型通常是有標準的，但是一般都假設共享位址空間並且不包含矢量運算。
而通用目的的 GPU 編程模型一般都具有複雜的內存分級尋址、矢量運算，
但通常都是基於某個特定平台、供應商或硬件的。
這些限制使得開發人員很難通過同一套多平台的源碼庫使用這些異構處理器
（ CPU、 GPU 和其他類型的處理器）。
更進一步，要讓軟件開發人員充分、高效的利用異構處理平台
——從高性能計算服務器、桌面計算機系統，一直到手持設備——
這些設備中有並行 CPU、 GPU 和其他處理器（如 DSP 和 Cell/B.E. 處理器），組合方式有很多種。

{\ftEmp{OpenCL}}（ Open Computing Language）是一種開放的免稅標準，
用於在 CPU、 GPU 和其他處理器上進行通用目的的並行編程，
他使軟件開發人員可以以一種高效可移植的方式使用這些異構處理平台。


OpenCL 支持廣泛的應用程式，從嵌入式、消費級的軟件到 HPC 解決方案都涵蓋在內，
而這是通過一個底層、高性能、可移植的抽象來完成的。
通過創建一個高效、更接近於硬件的編程接口， OpenCL 會在並行計算生態系統中形成一個基礎層，
此系統所包含的工具、中間件和應用程式都是跨平台的。
有一種新興的交互式圖形應用程式，將通用的並行計算算法和圖形渲染管線結合在一起；
 OpenCL 特別適合於這種應用程式，在其中扮演的角色愈發重要。

OpenCL 由一系列 API 和 一個跨平台的編程語言組成；
其中 API 可以協調異構處理器間的並行計算；而編程語言則明確規定了計算環境。
 OpenCL 標準：
\startigBase
\item 同時支持基於數據和基於任務的並行編程模型；
\item 使用 ISO C99 的一個子集，並為並行做了擴展；
\item 定義了與 IEEE 754 一致的數值需求；
\item 為手持和嵌入式設備定義了一個配置檔案；
\item 可以與 OpenGL、 OpenGL ES 以及其他圖形 API 進行高效的互操作。
\stopigBase

本文檔先對一些基本概念和 OpenCL 架構進行概述，
接着再詳細描述其執行模型、內存模型以及對同步的支持。
然後討論 OpenCL 平台和運行時 API，緊跟着是對 OpenCL C 編程語言的詳細描述，
並就如何用 OpenCL 編程進行採樣計算給出了一些示例。
此規範劃分為三部分：一是核心規格，所有符合 OpenCL 的實作都必須支持；
二是手持/嵌入式規格，降低了對手持和嵌入式設備的要求；
三是一些可選擴展，這些擴展可能會在後續修訂 OpenCL 規範時被納入核心規格。

\stopcomponent
